package com.bb.flow.config.node;

import com.bb.flow.api.ConditionValueCalc;
import com.bb.flow.config.AbstractConfigNode;
import com.bb.flow.config.ClassInfo;
import com.bb.flow.config.ConditionInfo;
import com.bb.flow.config.ToNode;
import com.bb.flow.config.enumtype.NodeType;

import java.util.ArrayList;
import java.util.List;

/**
 * @author bigbeard
 * 判断节点
 */
public class JudgeConfigNode extends AbstractConfigNode {


    /**
     * 条件计算类,必须实现[ConditionValueCalc]接口
     */
    private ClassInfo classInfo;

    /**
     * 条件计算接口
     */
    private ConditionValueCalc conditionValueCalc;
    /**
     * 去向接点集合
     */
    private final List<ToNode> toNodes = new ArrayList<>();
    /**
     * 条件信息
     */
    private ConditionInfo condition;


    public ClassInfo getClassInfo() {
        return classInfo;
    }

    public void setClassInfo(ClassInfo classInfo) {
        this.classInfo = classInfo;
    }

    /**
     * 获取条件计算接口
     *
     * @return 条件计算接口
     */
    public ConditionValueCalc getConditionValueCalc() {
        return conditionValueCalc;
    }

    /**
     * 设置条件计算对象
     *
     * @param conditionValueCalc 条件计算对象
     */
    public void setConditionValueCalc(ConditionValueCalc conditionValueCalc) {
        this.conditionValueCalc = conditionValueCalc;
    }

    /**
     * 获取条件信息
     *
     * @return 条件信息
     */
    public ConditionInfo getCondition() {
        return condition;
    }


    /**
     * 设置条件信息
     *
     * @param condition 条件
     * @return 当前对象
     */
    public JudgeConfigNode setCondition(ConditionInfo condition) {
        this.condition = condition;
        return this;
    }

    /**
     * 去向节点
     *
     * @return 去向节点集合
     */
    public List<ToNode> getToNodes() {
        return toNodes;
    }

    /**
     * 设置去向接点
     *
     * @param toNode 去向接点
     */
    public void add(ToNode toNode) {
        this.toNodes.add(toNode);
    }

    /**
     * 节点类型
     *
     * @return 获取接点类型
     */
    @Override
    public NodeType getNodeType() {
        return NodeType.JUDGE_NODE;
    }
}
